#include "../include/main_auditor.hh"
#include "../include/main_utils.hh"
#include <limits>

// 处理审计员菜单
void handleAuditorMenu(BankSystem& bankSystem, UIManager& uiManager) {
    while (true) {
        clearScreen();
        uiManager.showAuditorMenu();
        
        char choice = uiManager.getKeyChoice("ABCD");
        
        if (choice == 'D') { // 退出
            break;
        }
        
        // 处理选择
        switch (choice) {
            case 'A': { // 查看交易报告
                clearScreen();
                std::cout << "===== 查看交易报告 =====" << std::endl << std::endl;
                
                // 选择查看方式
                std::cout << "请选择报告类型:" << std::endl;
                std::cout << "1. 全局交易报告" << std::endl;
                std::cout << "2. 按客户姓名查看报告" << std::endl;
                std::cout << "3. 返回" << std::endl;
                
                int reportChoice = uiManager.getMenuChoice(1, 3);
                
                switch (reportChoice) {
                    case 1: { // 全局交易报告
                        if (bankSystem.generateGlobalTransactionReport()) {
                            std::cout << "已成功生成全局交易报告！" << std::endl;
                        } else {
                            std::cout << "生成报告失败。" << std::endl;
                        }
                        break;
                    }
                    case 2: { // 按客户姓名查看报告
                        std::string name = uiManager.getInput("请输入客户姓名: ");
                        if (bankSystem.generateCustomerReport(name)) {
                            std::cout << "已成功生成客户报告！" << std::endl;
                        } else {
                            std::cout << "生成报告失败。" << std::endl;
                        }
                        break;
                    }
                    case 3: // 返回
                        break;
                }
                
                uiManager.getInput("按回车键继续...");
                break;
            }
            case 'B': { // 查看季度报告
                clearScreen();
                std::cout << "===== 查看季度报告 =====" << std::endl << std::endl;
                
                // 选择季度
                int year, quarter;
                std::cout << "请输入年份: ";
                std::cin >> year;
                std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                
                std::cout << "请输入季度 (1-4): ";
                std::cin >> quarter;
                std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                
                if (quarter < 1 || quarter > 4) {
                    std::cout << "错误：季度必须为1到4之间的数字。" << std::endl;
                } else if (bankSystem.generateQuarterlyReport(year, quarter)) {
                    std::cout << "已成功生成季度报告！" << std::endl;
                } else {
                    std::cout << "生成报告失败。" << std::endl;
                }
                
                uiManager.getInput("按回车键继续...");
                break;
            }
            case 'C': { // 生成审计报告
                clearScreen();
                std::cout << "===== 生成审计报告 =====" << std::endl << std::endl;
                
                // 选择报告类型
                std::cout << "请选择审计报告类型:" << std::endl;
                std::cout << "1. 全系统审计报告" << std::endl;
                std::cout << "2. 客户活动审计报告" << std::endl;
                std::cout << "3. 返回" << std::endl;
                
                int auditChoice = uiManager.getMenuChoice(1, 3);
                
                switch (auditChoice) {
                    case 1: { // 全系统审计报告
                        std::cout << "正在生成全系统审计报告..." << std::endl;
                        std::cout << "此功能尚未实现。" << std::endl;
                        break;
                    }
                    case 2: { // 客户活动审计报告
                        std::string name = uiManager.getInput("请输入客户姓名: ");
                        std::cout << "正在生成客户 " << name << " 的活动审计报告..." << std::endl;
                        std::cout << "此功能尚未实现。" << std::endl;
                        break;
                    }
                    case 3: // 返回
                        break;
                }
                
                uiManager.getInput("按回车键继续...");
                break;
            }
        }
    }
} 